

import { isNormalType } from './checkers';
import { baseHandlers } from './handlers'
import { ProxyRaw, RawProxy } from './environment';
/**
 * 
 * @param {*} target 目标对象
 * @param {*} key 属性
 * @param {*} value 值
 */
export const createObservable = (target, key, value) => {
    // 如果不是普通对象，直接返回value
    if(typeof value !== 'object') {
        return value;
    }
    const raw = ProxyRaw.get(value)
    // 如果能够找到对应的原生对象，说明此原生对象已经创建过代理对象了，直接返回
    if (raw) {
        return value
    }
    // 如果是普通对象，就创建一个proxy代理对象
    if(isNormalType(value)) {
        return createNormalProxy(value);
    }
}

const createNormalProxy = (target) => {
    const proxy = new Proxy(target, baseHandlers)
    ProxyRaw.set(proxy, target)
    RawProxy.set(target, proxy)
    return proxy;
}